package com.myapp.struts.action;

import com.myapp.hibernate.model.*;
import com.myapp.hibernate.util.ApuestaUtil;
import com.myapp.hibernate.util.BoxeadorUtil;
import com.myapp.hibernate.util.CombateUtil;
import com.myapp.hibernate.util.EstadioUtil;
import com.myapp.struts.form.ApuestaForm;
import com.myapp.util.Fecha;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class SeccionApuestasAction extends org.apache.struts.action.Action {

    private static final String SUCCESS = "success";

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        ApuestaForm formulario = (ApuestaForm) form;
        ApuestaUtil apuestaUtil = new ApuestaUtil();
        BoxeadorUtil boxeadorUtil = new BoxeadorUtil();
        EstadioUtil estadioUtil = new EstadioUtil();
        CombateUtil combateUtil = new CombateUtil();


        ArrayList<Apuesta> apuestas = apuestaUtil.obtenerListaApuestas();


        Boxeador boxeadorAuxiliar;
        Combate combateAuxiliar;
        Usuario usuarioActivo = (Usuario) request.getSession().getAttribute("UsuarioLogado");

        ArrayList<MuestraApuesta> tabla = new ArrayList<MuestraApuesta>();

        //falta que muestre solo los de fechas posteriores a hoy
        for (Apuesta a : apuestas) {
            if (usuarioActivo.getIdUsuario() == a.getIdUsuario()) {

                MuestraApuesta ma = new MuestraApuesta();

                ma.setCantidad(a.getCantidad());
                ma.setCuota(a.getCuota());
                ma.setFecha(a.getFechaApuesta());
                ma.setId_apuesta(a.getIdApuesta());
                ma.setId_usuario(usuarioActivo.getIdUsuario());
                ma.setNombreUsuario(usuarioActivo.getNombre() + " " + usuarioActivo.getApellidos());
                ma.setIdCombate(a.getIdCombate());

                combateAuxiliar = combateUtil.obtenerCombate(a.getIdCombate());
                ma.setNombreEstadio(estadioUtil.obtenerEstadio(combateAuxiliar.getIdEstadio()).getNombre());

                boxeadorAuxiliar = boxeadorUtil.obtenerBoxeador(a.getIdBoxeador());
                ma.setNombreBoxeador(boxeadorAuxiliar.getNombre() + " " + boxeadorAuxiliar.getApellidos());
                ma.setId_boxeador(boxeadorAuxiliar.getIdBoxeador());

                if (combateAuxiliar.getIdGanador() != null) {
                    ma.setFinalizado(true);
                } else {
                    ma.setFinalizado(false);
                }

                tabla.add(ma);
            }
        }

        formulario.setListadoApuestas(tabla);


        Calendar hoy = new GregorianCalendar();
        String cadenaHoy = "";
        cadenaHoy += hoy.get(Calendar.YEAR) + "-" + Fecha.obtenerMesReal(hoy.get(Calendar.MONTH)) + "-" + hoy.get(Calendar.DAY_OF_MONTH);

        ArrayList<Combate> combates = combateUtil.obtenerListaCombatesPosteriores(cadenaHoy);
        ArrayList<MuestraCombate> listadoCombates = new ArrayList<MuestraCombate>();
        //falta que muestre solo los de fechas posteriores a hoy
        for (Combate c : combates) {
            MuestraCombate mc = new MuestraCombate();
            boxeadorAuxiliar = boxeadorUtil.obtenerBoxeador(c.getIdBoxeador1());
            mc.setNombreBoxeador1(boxeadorAuxiliar.getNombre() + " " + boxeadorAuxiliar.getApellidos());
            boxeadorAuxiliar = boxeadorUtil.obtenerBoxeador(c.getIdBoxeador2());
            mc.setNombreBoxeador2(boxeadorAuxiliar.getNombre() + " " + boxeadorAuxiliar.getApellidos());
            mc.setEstadio(estadioUtil.obtenerEstadio(c.getIdEstadio()).getNombre());
            mc.setFecha(c.getFecha());
            mc.setIdCombate(c.getIdCombate());
            listadoCombates.add(mc);
        }

        formulario.setListadoCombates(listadoCombates);

        return mapping.findForward(SUCCESS);
    }
}
